<html><head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Definition" rel="Chapter" href="Definition.html"><title>Definition.appel_au_vote</title>
</head>
<body>
<code class="code"><span class="keyword">let</span>&nbsp;appel_au_vote&nbsp;(condition_de_vote:&nbsp;(int&nbsp;<span class="keywordsign">-&gt;</span>bool))&nbsp;(vote_invalide:information<span class="keywordsign">-&gt;</span>bool)&nbsp;c_nbjoueurs&nbsp;joueurs&nbsp;idq&nbsp;id_vote&nbsp;type_vote=<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;urne&nbsp;=&nbsp;<span class="constructor">Array</span>.make&nbsp;c_nbjoueurs&nbsp;0&nbsp;<span class="keyword">and</span>&nbsp;tour=ref&nbsp;1&nbsp;<span class="keyword">and</span>&nbsp;majorite_absolue&nbsp;=&nbsp;ref&nbsp;<span class="keyword">false</span>&nbsp;<span class="keyword">and</span>&nbsp;victime=ref&nbsp;(-1)&nbsp;<span class="keyword">and</span>&nbsp;nb_votants&nbsp;=&nbsp;ref&nbsp;0&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*on&nbsp;informe&nbsp;que&nbsp;le&nbsp;vote&nbsp;commence*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span>&nbsp;id=0&nbsp;<span class="keyword">to</span>&nbsp;c_nbjoueurs&nbsp;-1&nbsp;<span class="keyword">do</span>&nbsp;<span class="keyword">if</span>&nbsp;condition_de_vote&nbsp;id&nbsp;<span class="keyword">then</span>&nbsp;joueurs.(id)<span class="keywordsign">#</span>donne_info&nbsp;(6,[|0|])&nbsp;<span class="keyword">done</span>;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span>&nbsp;!tour&nbsp;&lt;=&nbsp;2&nbsp;<span class="keywordsign">&amp;&amp;</span>&nbsp;(not&nbsp;!majorite_absolue)&nbsp;<span class="keyword">do</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*majorite&nbsp;absolue&nbsp;au&nbsp;1er&nbsp;tour&nbsp;ou&nbsp;relative&nbsp;au&nbsp;second&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;règle&nbsp;n°1]&nbsp;*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*remise&nbsp;a&nbsp;zéro&nbsp;des&nbsp;votes&nbsp;après&nbsp;un&nbsp;eventuel&nbsp;premier&nbsp;tour*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span>&nbsp;id=0&nbsp;<span class="keyword">to</span>&nbsp;c_nbjoueurs-1&nbsp;<span class="keyword">do</span>&nbsp;urne.(id)&lt;-&nbsp;0&nbsp;<span class="keyword">done</span>;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*&nbsp;Vote&nbsp;des&nbsp;joueurs*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span>&nbsp;id=0&nbsp;<span class="keyword">to</span>&nbsp;c_nbjoueurs-1&nbsp;<span class="keyword">do</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>&nbsp;condition_de_vote&nbsp;id&nbsp;<span class="keyword">then</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">begin</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr&nbsp;nb_votants;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Reccueil&nbsp;du&nbsp;vote&nbsp;du&nbsp;joueur*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;reponse=ref&nbsp;(joueurs.(id)<span class="keywordsign">#</span>pose_question&nbsp;(idq,[|!tour|]))&nbsp;<span class="keyword">and</span>&nbsp;nbessais=ref&nbsp;1&nbsp;<span class="keyword">in</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Vérification&nbsp;de&nbsp;la&nbsp;validité&nbsp;du&nbsp;vote*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span>&nbsp;vote_invalide&nbsp;!reponse&nbsp;<span class="keywordsign">&amp;&amp;</span>&nbsp;!nbessais&nbsp;&lt;&nbsp;<span class="constructor">Regles</span>.nb_vote_max&nbsp;<span class="keyword">do</span>&nbsp;<span class="comment">(*correction&nbsp;issue6:&nbsp;vote&nbsp;contre&nbsp;un&nbsp;mort*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;v_print&nbsp;2&nbsp;<span class="string">"Arbitre:&nbsp;%i&nbsp;vote&nbsp;de&nbsp;façon&nbsp;invalide&nbsp;(contre&nbsp;%i),&nbsp;il&nbsp;n'a&nbsp;plus&nbsp;que&nbsp;%i&nbsp;essais&nbsp;avant&nbsp;de&nbsp;voter&nbsp;contre&nbsp;lui&nbsp;même\n"</span>&nbsp;id&nbsp;((snd&nbsp;!reponse).(0))&nbsp;(<span class="constructor">Regles</span>.nb_vote_max-&nbsp;!nbessais));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reponse&nbsp;:=&nbsp;joueurs.(id)<span class="keywordsign">#</span>pose_question&nbsp;(idq,[|!tour|]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr&nbsp;nbessais<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">done</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*&nbsp;Application&nbsp;de&nbsp;la&nbsp;règle&nbsp;n°3&nbsp;:&nbsp;vote&nbsp;contre&nbsp;soi-même*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>&nbsp;!nbessais&nbsp;=&nbsp;<span class="constructor">Regles</span>.nb_vote_max<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">then</span>&nbsp;(urne.(id)&lt;-urne.(id)+1;(&nbsp;v_print&nbsp;3&nbsp;<span class="string">"Arbitre:&nbsp;%i&nbsp;vote&nbsp;contre&nbsp;lui-même&nbsp;car&nbsp;il&nbsp;a&nbsp;dépassé&nbsp;la&nbsp;barre&nbsp;des&nbsp;%i&nbsp;votes&nbsp;incorrects\n"</span>&nbsp;id&nbsp;<span class="constructor">Regles</span>.nb_vote_max))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Prise&nbsp;en&nbsp;compte&nbsp;du&nbsp;vote*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">begin</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;urne.((snd&nbsp;!reponse).(0))&lt;-&nbsp;urne.((snd&nbsp;!reponse).(0))&nbsp;+&nbsp;1&nbsp;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;v_print&nbsp;2&nbsp;<span class="string">"Arbitre:&nbsp;%i&nbsp;vote&nbsp;contre&nbsp;%i\n"</span>&nbsp;id&nbsp;(snd&nbsp;!reponse).(0));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Communication&nbsp;du&nbsp;vote&nbsp;à&nbsp;tous&nbsp;les&nbsp;joueurs&nbsp;concernés*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;communication_du_vote&nbsp;(condition_de_vote)&nbsp;c_nbjoueurs&nbsp;joueurs&nbsp;(4,[|id_vote;type_vote;!tour;&nbsp;id;(snd&nbsp;!reponse).(0)&nbsp;|])&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">done</span>;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Désignation&nbsp;de&nbsp;la&nbsp;victime*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;(vict,maj)&nbsp;=&nbsp;vote_majorite&nbsp;urne&nbsp;<span class="keyword">in</span>&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;majorite_absolue&nbsp;:=maj&nbsp;;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;victime:=vict;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;v_print&nbsp;3&nbsp;<span class="string">"Conteur:&nbsp;%s,&nbsp;tour:&nbsp;%i\n"</span>&nbsp;(<span class="keyword">if</span>&nbsp;!majorite_absolue&nbsp;<span class="keyword">then</span>&nbsp;<span class="string">"Majorité&nbsp;absolue"</span>&nbsp;<span class="keyword">else</span>&nbsp;<span class="string">"Pas&nbsp;de&nbsp;majorité&nbsp;absolue"</span>)&nbsp;!tour);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*on&nbsp;informe&nbsp;que&nbsp;le&nbsp;tour&nbsp;est&nbsp;fini*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span>&nbsp;id=0&nbsp;<span class="keyword">to</span>&nbsp;c_nbjoueurs&nbsp;-1&nbsp;<span class="keyword">do</span>&nbsp;<span class="keyword">if</span>&nbsp;condition_de_vote&nbsp;id&nbsp;<span class="keyword">then</span>&nbsp;joueurs.(id)<span class="keywordsign">#</span>donne_info&nbsp;(6,[|!tour|])&nbsp;<span class="keyword">done</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr&nbsp;tour<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">done</span>;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*on&nbsp;informe&nbsp;que&nbsp;le&nbsp;vote&nbsp;est&nbsp;fini*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span>&nbsp;id=0&nbsp;<span class="keyword">to</span>&nbsp;c_nbjoueurs&nbsp;-1&nbsp;<span class="keyword">do</span>&nbsp;<span class="keyword">if</span>&nbsp;condition_de_vote&nbsp;id&nbsp;<span class="keyword">then</span>&nbsp;joueurs.(id)<span class="keywordsign">#</span>donne_info&nbsp;(6,[|3|])&nbsp;<span class="keyword">done</span>;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">(*Renvoi&nbsp;du&nbsp;résultat*)</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;((!victime,&nbsp;!nb_votants):int*int)</code></body></html>